<template>
  <div class="swiper" ref="swiper">
    <div class="swiper-wrapper">
      <!-- 
        问题：webpack打包时没有内容引用轮播图图片，所有图片没有被打包
        后面想要显示图片出现404
        解决：让webpack打包图片
       -->
      <div class="swiper-slide" v-for="banner in bannerList" :key="banner.id">
        <img :src="banner.imgUrl" :alt="`banner${banner.id}`" />
      </div>
    </div>
    <div class="swiper-button-next"></div>
    <div class="swiper-button-prev"></div>
    <div class="swiper-pagination"></div>
  </div>
</template>

<script>
/*
  https://www.swiper.com.cn/usage/index.html

  1. 下载swiper
    npm i swiper
  2. 引入swiper js和css
  3. 准备swiper结构
  4. new Swiper生成轮播图
*/
import Swiper from 'swiper/bundle'
import 'swiper/css/bundle'

export default {
  name: 'XCarousel',
  props: {
    bannerList: Array,
  },
  // mounted() {},
  watch: {
    bannerList: {
      async handler(newVal) {
        // 让第一个轮播图第一次触发watch，数据为空的时候，return
        if (!newVal.length) return
        
        // 等bannerList有数据时触发
        // console.log(newVal);
        // vue所有更新是异步的
        // bannerList有值，但是还未渲染成DOM元素

        // this.$nextTick(() => {
        //   // 必须保证：DOM元素生成好才能创建轮播图
        //   // 更多的swiper配置：https://www.swiper.com.cn/api/index.html
        //   new Swiper(".my-swiper", {
        //     autoplay: true, // 自动轮播
        //     // autoplay: {
        //     //   delay: 1000,
        //     // },
        //     loop: true, // 无限轮播
        //     // 小圆点
        //     pagination: {
        //       el: ".swiper-pagination",
        //       clickable: true, // 可以点击跳转
        //     },
        //     // 左右箭头
        //     navigation: {
        //       nextEl: ".swiper-button-next",
        //       prevEl: ".swiper-button-prev",
        //     },
        //   });
        // });

        // 等DOM元素更新好
        await this.$nextTick()

        new Swiper(this.$refs.swiper, {
          autoplay: true, // 自动轮播
          // autoplay: {
          //   delay: 1000,
          // },
          loop: true, // 无限轮播
          // 小圆点
          pagination: {
            el: '.swiper-pagination',
            clickable: true, // 可以点击跳转
          },
          // 左右箭头
          navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
          },
        })
      },
      immediate: true, // 让监视属性第一次触发
    },
  },
}
</script>

<style></style>
